Chương 5: Một số kỹ thuật trực quan hóa dùng trong phân tích dữ liệu¶

  • Box plots
  • Histograms
  • Heat Maps
  • Charts: Bar Charts, Line Charts, Pie Charts, Scatter Charts, Bubble Charts
  • Treemaps
  • Word Cloud and Network diagram for Unstructured Data
  • Wedge stack graphs
  • Streamgraphs
  • Dendrograms
  • Trực quan hóa dữ liệu là kỹ thuật biểu diễn dữ liệu bằng đồ họa, có sử dụng các yếu tố trực quan như biểu đồ và đồ thị để phát hiện xu hướng, mẫu hình và các giá trị ngoại lệ, từ đó đúc kết nhanh thông tin chuyên sâu và hỗ trợ trong việc ra quyết định tức thời. Trong thế giới ngày nay, việc hiểu được khối lượng dữ liệu khổng lồ mà doanh nghiệp tạo ra mỗi ngày ngày càng quan trọng.

1. Box plots¶

matplotlib.pyplot.boxplot()

  • Boxplot là một dạng biểu đồ thể hiện phân phối dữ liệu của các thuộc tính số thông qua các “tứ phân vị”
  • Boxplot thể hiện các phân phối dữ liệu, nghĩa là giúp chúng ta biết được độ dàn trải của các điểm dữ liệu như thế nào, dữ liệu có đối xứng không, phân bố rộng hay hẹp, giá trị nhỏ nhất, lớn nhất và các điểm ngoại lệ. image.png
  • Biểu đồ Boxplot thể hiện 5 thông số: • Median: Trung vị của tập dữ liệu, tức là giá trị ở phần tử giữa. • First quartile (Q1): Trung vị giữa Median và phần tử nhỏ nhất trong tập dữ liệu. Còn gọi là 25th Percentile. • Third quartile (Q3): Trung vị giữa Median và phần tử lớn nhất trong tập dữ liệu. Còn gọi là 75th Percentile. • Minimum: Phần tử nhỏ nhất không phải ngoại lệ. • Maximum: Phần tử lớn nhất không phải là ngoại lệ.
  • Mặc dù biểu đồ hộp có vẻ nguyên thủy so với biểu đồ hoặc biểu đồ mật độ , nhưng chúng có lợi thế là chiếm ít không gian hơn, điều này rất hữu ích khi so sánh phân phối giữa nhiều nhóm hoặc tập dữ liệu. Biểu đồ hộp cung cấp thông tin về sự thay đổi hoặc phân tán của dữ liệu
  • Đầu vào có thể là một danh sách, một mảng NumPy , một mảng, một danh sách các vectơ, một DataFrame
In [9]:
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)

# fake up some data
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
In [10]:
fig1, ax1 = plt.subplots()
ax1.set_title('Basic Plot')
ax1.boxplot(data)
Out[10]:
{'whiskers': [<matplotlib.lines.Line2D at 0x2bb94952610>,
  <matplotlib.lines.Line2D at 0x2bb949528e0>],
 'caps': [<matplotlib.lines.Line2D at 0x2bb94952bb0>,
  <matplotlib.lines.Line2D at 0x2bb94952e80>],
 'boxes': [<matplotlib.lines.Line2D at 0x2bb94952310>],
 'medians': [<matplotlib.lines.Line2D at 0x2bb94960190>],
 'fliers': [<matplotlib.lines.Line2D at 0x2bb94960460>],
 'means': []}
In [11]:
#hiển thị khoảng tin cậy xung quanh trung bình thường dựa trên trung vị +/- 1,57 x IQR / sqrt của n
fig2, ax2 = plt.subplots()
ax2.set_title('Notched boxes')
ax2.boxplot(data, notch=True)
Out[11]:
{'whiskers': [<matplotlib.lines.Line2D at 0x2bb949c5250>,
  <matplotlib.lines.Line2D at 0x2bb949c5520>],
 'caps': [<matplotlib.lines.Line2D at 0x2bb949c57f0>,
  <matplotlib.lines.Line2D at 0x2bb949c5ac0>],
 'boxes': [<matplotlib.lines.Line2D at 0x2bb949b4f10>],
 'medians': [<matplotlib.lines.Line2D at 0x2bb949c5d90>],
 'fliers': [<matplotlib.lines.Line2D at 0x2bb949d00a0>],
 'means': []}

2. Histograms¶

matplotlib.pyplot.hist () Đây là một đại diện biểu đồ của một phân bố tần suất của một số dữ liệu số. Hình chữ nhật có kích thước bằng nhau theo chiều ngang có chiều cao tương ứng với tần suất. image-5.png

  • Các thanh cao hơn cho biết rằng nhiều dữ liệu hơn nằm trong phạm vi đó.
  • Biểu đồ hiển thị hình dạng và sự lan truyền của dữ liệu mẫu liên tục.
  • Đây là một biểu đồ cho phép bạn tìm và hiển thị, phân bố tần số cơ bản (hình dạng) của một tập hợp dữ liệu liên tục.
  • Điều này cho phép đánh giá dữ liệu về sự phân phối thiết yếu, độ lệch, giá trị ngoại lai, v.v.
  • Kết hợp cột- phạm vi giá trị phân chia toàn bộ phạm vi giá trị thành một chuỗi các khoảng và sau đó kiểm tra số lượng giá trị nằm trong mỗi khoảng.
  • Các cột là các khoảng tuần tự, không bao trùm của các biến. Khi các cột liền kề không để lại khoảng trống, các hình chữ nhật của biểu đồ tiếp xúc với nhau để chứng minh rằng giá trị đầu tiên là liên tục. Biểu đồ tần suất nên được đưa vào sử dụng khi có sẵn một lượng lớn dữ liệu, nhưng lượng dữ liệu này lại tạo ra dữ liệu tổng hợp không thể quản lý. Biểu đồ tần suất có ý nghĩa bởi nó mô tả xu hướng của một lượng dữ liệu lớn ở dạng đơn giản mà không làm mất bất cứ thông tin thống kê nào Nếu quá nhiều điểm dữ liệu, nên sử dụng Biểu đồ phần trăm, nó sẽ giúp thể hiện rõ hơn chiều hướng của sự việc.
In [12]:
#Ví dụ sau vẽ biểu đồ về điểm của các sinh viên trong một lớp học. Bốn cột, 0-25, 26-50, 51-75 và 76-100 
# Add the essential library
import matplotlib.pyplot as plt
# Create the data
employee_age = [21,28,32,34,35,35,37,42,47,55]
# Create bins for histogram
bins = [20,30,40,50,60]
# Plot the histogramData Visualization Chapter 5
[ 145 ]
plt.hist(employee_age, bins, rwidth=0.6)
# Add X Label on X-axis
plt.xlabel("Employee Age")
# Add X Label on X-axis
plt.ylabel("Frequency")
# Add title to graph
plt.title("Employee Age Distribution")
# Show the plot
plt.show()

3. Heat Maps¶

seaborn.heatmap () Bản đồ nhiệt được định nghĩa là một biểu diễn đồ họa của dữ liệu sử dụng màu sắc để trực quan hóa giá trị của ma trận. Heat Maps thể hiện các giá trị phổ biến hơn hoặc các hoạt động cao hơn, màu sáng hơn về cơ bản được sử dụng và để đại diện cho các giá trị hoạt động hoặc ít phổ biến hơn, màu tối hơn được ưu tiên! image-3.png Sự khác biệt trong cách thể hiện màu sắc này giúp người xem dễ dàng hiểu được xu hướng nhanh chóng hơn. Nó có lợi cho hai mục đích chính:

  1. Để hình thị bảng tương quan
  2. Để hình thị các giá trị bị thiếu trong dữ liệu
  • Trong cả hai trường hợp, thông tin được truyền đạt trong một bảng hai chiều.
  • Biểu đồ hệ số tương quan.
  • Biểu đồ địa lý về cảnh báo thiên tai.
  • Biểu đồ mật độ dân số.
  • Biểu đồ crazy egg trong đo lường các component được sử dụng nhiều trong 1 website hoặc app. …
In [48]:
# Import required library
import seaborn as sns
# Read iris data using load_dataset() function
data = sns.load_dataset("iris")
# Find correlationData Visualization Chapter 5
[ 163 ]
cor_matrix=data.corr()
# Create heatmap
sns.heatmap(cor_matrix, annot=True)
# Show figure
plt.show()
In [10]:
# Create heatmap
sns.heatmap(cor_matrix, annot=True, cmap="YlGnBu")
# Show figure
plt.show()

4. Charts¶

a. Bar charts¶

  • Biểu đồ bar là một biểu đồ biểu thị cách dữ liệu số được biểu diễn. Đầu vào của nó là một biến số, nó được phân tách thành các thùng trên trục x. Đây là một vectơ gồm các số và có thể là một danh sách hoặc một cột DataFrame.
  • Thanh cao hơn thể hiện nhiều quan sát hơn trên mỗi thanh. Ngoài ra, số lượng thanh quyết định hình dạng của biểu đồ. image-2.png
  • Biểu đồ cột là một trong những kỹ thuật đơn giản của trực quan hóa dữ liệu. Các loại biểu đồ này được sử dụng để so sánh số lượng của các danh mục khác nhau.
  • Biểu đồ thanh là lựa chọn tốt nhất với một số đặc điểm nếu ta muốn kiểm tra dữ liệu theo thời gian hoặc dữ liệu được tập hợp trong nhiều lĩnh vực như các ngành khác nhau, nhiều loại thực phẩm, v.v.,
In [1]:
#Số lượng sinh viên đăng ký cho các khóa học khác nhau được cung cấp tại một viện.
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
In [2]:
#Đối tượng dữ liệu là một số lượng sinh viên đã đậu vào ba ngành của một trường cao đẳng kỹ thuật trong bốn năm qua.
import numpy as np
import matplotlib.pyplot as plt
data = [[30, 25, 50, 20],
[40, 23, 51, 17],
[35, 22, 45, 19]]
X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
Out[2]:
<BarContainer object of 4 artists>

b. Line Charts¶

  • Biểu đồ đường là một biểu đồ hiển thị một đường thẳng giữa hai biến. Nó có một chuỗi dữ liệu các điểm được nối bởi một đoạn thẳng image-2.png Biểu đồ đường được sử dụng để biểu diễn mối quan hệ giữa hai dữ liệu X và Y trên một trục khác nhau. Ở đây chúng ta sẽ thấy một số ví dụ về biểu đồ đường trong Python: Nó được sử dụng để vẽ biểu đồ mối quan hệ phụ thuộc của một biến này vào biến khác như nếu bạn muốn hiển thị dữ liệu trong thời gian rất dài hoặc dữ liệu liên tục thay đổi, biểu đồ đường có thể là một lựa chọn tốt
In [6]:
import matplotlib.pyplot as plt
   
Year = [1920,1930,1940,1950,1960,1970,1980,1990,2000,2010]
Unemployment_Rate = [9.8,12,8,7.2,6.9,7,6.5,6.2,5.5,6.3]
  
plt.plot(Year, Unemployment_Rate)
plt.title('Unemployment Rate Vs Year')
plt.xlabel('Year')
plt.ylabel('Unemployment Rate')
plt.show()
In [7]:
import matplotlib.pyplot as plt
   
Year = [1920,1930,1940,1950,1960,1970,1980,1990,2000,2010]
Unemployment_Rate = [9.8,12,8,7.2,6.9,7,6.5,6.2,5.5,6.3]
  
plt.plot(Year, Unemployment_Rate, color='red', marker='o')
plt.title('Unemployment Rate Vs Year', fontsize=14)
plt.xlabel('Year', fontsize=14)
plt.ylabel('Unemployment Rate', fontsize=14)
plt.grid(True)
plt.show()

c. Pie Charts¶

  • Biểu đồ hình tròn là một đồ thị hình tròn được chia thành các mảnh hình nêm. Mỗi phần đều tương xứng với giá trị mà nó thể hiện. Tổng giá trị của biểu đồ là 100 phần trăm: image-2.png
  • Diện tích của biểu đồ là tổng phần trăm của dữ liệu đã cho.
  • Diện tích các lát của chiếc bánh đại diện cho tỷ lệ phần trăm của các phần dữ liệu.
  • Các lát bánh được gọi là nêm.
  • Diện tích của cái nêm được xác định bởi độ dài của cung tròn của cái nêm.
  • Diện tích hình nêm thể hiện tỷ lệ phần trăm tương đối của phần đó so với toàn bộ dữ liệu.
  • Biểu đồ hình tròn thường được sử dụng trong các bài thuyết trình kinh doanh như bán hàng, hoạt động, kết quả khảo sát, tài nguyên, v.v. vì chúng cung cấp một bản tóm tắt nhanh.
In [8]:
#biểu đồ hình tròn của danh sách sinh viên đăng ký các khóa học ngôn ngữ máy tính khác nhau
from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.pie(students, labels = langs,autopct='%1.2f%%')
plt.show()

d. Scatter Charts¶

Biểu đồ phân tán vẽ các điểm dữ liệu bằng cách sử dụng tọa độ Descartes để hiển thị giá trị của các giá trị số. Chúng cũng đại diện cho mối quan hệ giữa giá trị của 2 biến. image.png Vị trí điểm đánh dấu là giá trị cho mỗi lần quan sát.

In [14]:
import matplotlib.pyplot as plt


x =[5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6]

y =[99, 86, 87, 88, 100, 86, 103, 87, 94, 78, 77, 85, 86]

plt.scatter(x, y, c ="blue")

# To show the plot
plt.show()
In [15]:
import matplotlib.pyplot as plt

# dataset-1
x1 = [89, 43, 36, 36, 95, 10, 66, 34, 38, 20]

y1 = [21, 46, 3, 35, 67, 95, 53, 72, 58, 10]

# dataset2
x2 = [26, 29, 48, 64, 6, 5, 36, 66, 72, 40]

y2 = [26, 34, 90, 33, 38, 20, 56, 2, 47, 15]

plt.scatter(x1, y1, c ="pink",linewidths = 2,marker ="s",edgecolor ="green",s = 50)
plt.scatter(x2, y2, c ="yellow",linewidths = 2,marker ="^",edgecolor ="red",s = 200)
plt.xlabel("X-axis")
plt.ylabel("Y-axis")
plt.show()

e. Bubble Charts¶

  • Biểu đồ bong bóng là một loại biểu đồ phân tán. Nó không chỉ vẽ các điểm dữ liệu bằng cách sử dụng tọa độ Descartes mà còn tạo ra các bong bóng trên các điểm dữ liệu. Bong bóng hiển thị chiều thứ ba .
  • Nó hiển thị ba giá trị số: hai giá trị nằm trên trục x và y và giá trị thứ ba là kích thước của điểm dữ liệu (hoặc bong bóng): image.png Biểu đồ bong bóng là một biến thể của biểu đồ phân tán trong đó các điểm dữ liệu được thay thế bằng bong bóng. Ngoài ra, một tỷ lệ dữ liệu bổ sung được mô tả theo kích thước của bong bóng. Bạn có thể sử dụng biểu đồ này để phân tích các mẫu hoặc mối tương quan. Mỗi dấu chấm trong biểu đồ bong bóng tương ứng với một điểm dữ liệu duy nhất. Giá trị của các biến cho mỗi điểm được hiển thị bởi vị trí ngang, vị trí dọc và kích thước điểm.
In [18]:
# Import the required modules
import matplotlib.pyplot as plt
import numpy as np
# Set figure size
plt.figure(figsize=(8,5))
# Create the data
countries =['Qatar','Luxembourg','Singapore','Brunei','Ireland','Norway','UAE','Kuwait']
populations = [2781682,
604245,5757499,428963,4818690,5337962,9630959,4137312]
gdp_per_capita = [130475, 106705, 100345, 79530, 78785, 74356,69382, 67000]
# scale GDP per capita income to shoot the bubbles in the graph
scaled_gdp_per_capita = np.divide(gdp_per_capita, 80)
colors = np.random.rand(8)
# Draw the scatter diagram
plt.scatter(countries, populations, s=scaled_gdp_per_capita, c=colors,
cmap="Blues",edgecolors="grey", alpha=0.5)
# Add X Label on X-axis
plt.xlabel("Countries")
# Add Y Label on X-axis
plt.ylabel("Population")
# Add title to graph
plt.title("Bubble Chart")
# rotate x label for clear visualization
plt.xticks(rotation=45)
# Show the plot
plt.show()

5. Treemaps¶

Hình ảnh hóa dữ liệu là một kỹ thuật mạnh mẽ để phân tích một tập dữ liệu lớn thông qua biểu diễn đồ họa. Python cung cấp các mô-đun khác nhau hỗ trợ việc biểu diễn dữ liệu bằng đồ họa. Các mô-đun được sử dụng rộng rãi là Matplotlib , Seaborn và Plotly . Và chúng ta có một mô-đun nữa tên là Squarify chủ yếu được sử dụng để vẽ Sơ đồ cây image.png

  • Trong Bản đồ dạng cây, kích thước của các hình chữ nhật được sử dụng cho mỗi danh mục tỷ lệ với phần trăm tổng thể của nó.
  • Hình chữ nhật trung tâm có một vùng tương ứng với phần tử được xác định trước của dữ liệu.
  • Tùy thuộc vào quyết định, trung tâm lá có màu sắc, kích thước hoặc cả hai tùy theo dữ liệu đã chọn.
  • Chúng tận dụng không gian, do đó hiển thị nhiều thông tin trên màn hình một lúc.
In [23]:
#pip install squarify
n = titanic.groupby('class')[['survived']].sum()
n
Out[23]:
survived
class
First 136
Second 87
Third 119
In [20]:
import seaborn as sns
import squarify 
import matplotlib.pyplot as plt
 
titanic = sns.load_dataset('titanic')
 
a = titanic.groupby('class')[['survived']].sum().index.get_level_values(0).tolist()
 
d = titanic.groupby('class')[['survived']].sum().reset_index().survived.values.tolist()
 
squarify.plot(sizes=d,label=a, alpha=.8 )
plt.axis('off')
plt.show()

6. Word Cloud and Network diagram for Unstructured Data¶

a. Word Cloud¶

  • Word Cloud hoặc Tag Clouds là một kỹ thuật trực quan hóa cho các văn bản vốn được sử dụng để hiển thị các thẻ hoặc từ khóa từ các trang web. Những từ khóa này thường là những từ đơn mô tả ngữ cảnh của trang web mà đám mây từ đang được tạo ra.
  • Những từ này được nhóm lại với nhau để tạo thành Đám mây từ. image.png
  • Mỗi từ trong đám mây này có kích thước phông chữ và tông màu thay đổi. Do đó, biểu diễn này giúp xác định các từ nổi bật.
  • Kích thước phông chữ lớn hơn của một từ thể hiện sự nổi bật của nó so với các từ khác trong cụm.
  • Word Cloud có thể được xây dựng với nhiều hình dạng và kích thước khác nhau dựa trên tầm nhìn của người sáng tạo.
  • Số lượng từ đóng một vai trò quan trọng trong khi tạo Word Cloud.
  • Nhiều từ hơn không phải lúc nào cũng có nghĩa là Word Cloud tốt hơn vì nó trở nên lộn xộn và khó đọc. Word Cloud phải luôn có ý nghĩa về mặt ngữ nghĩa và phải đại diện cho ý nghĩa của nó.
  • Việc phân loại dữ liệu lớn mang lại khó khăn vì thông tin bán cấu trúc và phi cấu trúc đòi hỏi các kỹ thuật trực quan hóa mới.
  • Một hình ảnh đám mây từ thể hiện tần suất của một từ bên trong một bộ sưu tập văn bản với kích thước chung của nó trong đám mây. Kỹ thuật này được sử dụng trên dữ liệu phi cấu trúc như một cách tiếp cận để hiển thị các từ có độ lặp lại cao hoặc thấp.
In [42]:
#!pip install wordcloud
#!pip install pillow
#!pip install matplotlib
In [41]:
# Importing Libraries
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS
# Importing Dataset
df = pd.read_csv("Restaurant_Reviews.tsv", sep="	")
#Creating the text variable
text = " ".join(cat for cat in df.Review)
# Generate word cloud
word_cloud = WordCloud(width=3000, height=2000, random_state=1, background_color="salmon", colormap="Pastel1", 
collocations=False, stopwords=STOPWORDS,).generate(text)
# Display the generated Word Cloud
plt.imshow(word_cloud)
plt.axis("off")
plt.show()

b.Network diagram¶

image.png

7. Wedge stack graphs¶

Đồ thị ngăn xếp hình nêm là một trong những kỹ thuật trực quan hóa dữ liệu cho thấy dữ liệu phân cấp trong một hệ thống bán kính image.png

  • Các đồ thị này có thể được sử dụng để minh họa dữ liệu tần số đa cấp.
  • Nếu bạn yêu cầu một biểu đồ xếp chồng với các hình nêm thì loại biểu đồ sẽ chuyển sang Tường được xếp chồng lên nhau.
  • Kích thước đối tượng và số lượng các chỉ báo bên không ảnh hưởng đến loại đồ thị Nêm.
In [43]:
import numpy as np
import matplotlib.pyplot as plt

# data from United Nations World Population Prospects (Revision 2019)
# https://population.un.org/wpp/, license: CC BY 3.0 IGO
year = [1950, 1960, 1970, 1980, 1990, 2000, 2010, 2018]
population_by_continent = {
    'africa': [228, 284, 365, 477, 631, 814, 1044, 1275],
    'americas': [340, 425, 519, 619, 727, 840, 943, 1006],
    'asia': [1394, 1686, 2120, 2625, 3202, 3714, 4169, 4560],
    'europe': [220, 253, 276, 295, 310, 303, 294, 293],
    'oceania': [12, 15, 19, 22, 26, 31, 36, 39],
}

fig, ax = plt.subplots()
ax.stackplot(year, population_by_continent.values(),
             labels=population_by_continent.keys(), alpha=0.8)
ax.legend(loc='upper left')
ax.set_title('World population')
ax.set_xlabel('Year')
ax.set_ylabel('Number of people (millions)')

plt.show()

8. Streamgraphs¶

Biểu đồ dòng là một loạt các biểu đồ khu vực xếp chồng lên nhau. Thay vì vẽ biểu đồ các giá trị theo trục y thông thường, đồ thị dòng sẽ cân bằng đường cơ sở của mỗi "ngăn xếp" để làm cho nó đồng đều quanh trục x. image.png Biểu đồ dòng là lý tưởng để hiển thị bộ dữ liệu khối lượng lớn, để tìm các mẫu và xu hướng trong một khoảng thời gian dài trên phạm vi phân loại rộng. Ví dụ, các đỉnh và đáy theo mùa trong hình dạng dòng suối có thể thể hiện một ví dụ không liên tục. Biểu đồ luồng cũng có thể được sử dụng để hình dung sự không ổn định đối với việc thu thập tài nguyên khổng lồ trong một khung thời gian cụ thể.

In [44]:
# Fixing random state for reproducibility
np.random.seed(19680801)


def gaussian_mixture(x, n=5):
    """Return a random mixture of *n* Gaussians, evaluated at positions *x*."""
    def add_random_gaussian(a):
        amplitude = 1 / (.1 + np.random.random())
        dx = x[-1] - x[0]
        x0 = (2 * np.random.random() - .5) * dx
        z = 10 / (.1 + np.random.random()) / dx
        a += amplitude * np.exp(-(z * (x - x0))**2)
    a = np.zeros_like(x)
    for j in range(n):
        add_random_gaussian(a)
    return a


x = np.linspace(0, 100, 101)
ys = [gaussian_mixture(x) for _ in range(3)]

fig, ax = plt.subplots()
ax.stackplot(x, ys, baseline='wiggle')
plt.show()

9. Dendrograms¶

scipy.cluster.hierarchy.linkage(ndarray , method , metric , optimal_ordering)

  • Dendrogram là một biểu đồ giống như cây được sử dụng để hình dung mối quan hệ giữa các cụm.
  • Khoảng cách của các đường thẳng đứng trong biểu đồ hình ảnh càng nhiều thì khoảng cách giữa các cụm đó càng nhiều.
  • Chìa khóa để giải thích một biểu đồ dendrogram là tập trung vào độ cao mà tại đó hai đối tượng bất kỳ được nối với nhau. Ví dụ về dendrogram: Giả sử chúng ta có sáu cụm: P, Q, R, S, T và U. Biểu đồ phân cấp của cụm của sáu quan sát này được hiển thị trên biểu đồ phân tán là: image.png

Các bộ phận của Dendrogram • Các nhánh của dendrogram được gọi là Clades. Các nhóm này được sắp xếp theo mức độ giống nhau hoặc khác nhau của chúng. • Mỗi nhánh của cây chùm ngây có một hoặc nhiều lá. P, Q, R, S, T và U là các lá của biểu đồ dendrogram:

  • Bộ ba (ba lần): P, Q, R
  • Double (bifolius): S, T
  • Đơn (simplicifolius): U
In [45]:
# Dendrogram thông thường
# Python program to plot the hierarchical
# clustering dendrogram using SciPy

# Import the python libraries
import numpy as np
from scipy.cluster import hierarchy
import matplotlib.pyplot as plt

# Create an array
x = np.array([100., 200., 300., 400., 500., 250.,450., 280., 450., 750.])

# Plot the hierarchical clustering as a dendrogram.
temp = hierarchy.linkage(x, 'single')
plt.figure()

dn = hierarchy.dendrogram(temp, above_threshold_color="green", color_threshold=.7)
In [49]:
# Dendrogram sử dụng hướng ngang
# Plot the dendrogram in horizontal orientation
# Import the python libraries
import numpy as np
from scipy.cluster import hierarchy
import matplotlib.pyplot as plt

# Create an array
x = np.array([100., 200., 300., 400., 500., 250.,450., 280., 450., 750.])

# Plot the hierarchical clustering as a dendrogram.
temp = hierarchy.linkage(x, 'single')
plt.figure()
dn = hierarchy.dendrogram(temp, above_threshold_color="green", color_threshold=.7, orientation='right')
In [ ]: